package com.spider.spiderflowable.core.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.spider.spiderflowable.business.entity.dto.ExecApprovalFlowInstParam;
import com.spider.spiderflowable.business.entity.param.ApprovalQueryParam;
import com.spider.spiderflowable.business.entity.vo.ProcessInstResultVo;
import com.spider.spiderflowable.core.entity.vo.FlowableTaskVO;
import java.util.List;
import java.util.Map;
import org.flowable.identitylink.api.IdentityLink;

/**
 * @author xiong.bo
 * @version 1.0
 * @date 2024/5/7 8:10 下午
 */
public interface SpiderTaskService {


    /**
     * 签收
     *
     * @param taskId 任务实例ID
     * @param userId 用户ID
     */
    void claim(String taskId, String userId);

    /**
     * 执行流程
     *
     * @param param
     * @return
     */
    ProcessInstResultVo completeProcessInst(ExecApprovalFlowInstParam param);

    /**
     * 委派他人来完成任务
     *
     * @param taskId 任务实例ID
     * @param userId 变量数据
     */
    void delegateTask(String taskId, String userId);

    /**
     * 分配任务给某个用户
     *
     * @param taskId 任务实例ID
     * @param userId 用户ID
     */
    void setAssignee(String taskId, String userId);

    /**
     * 给任务添加候选用户
     *
     * @param taskId
     * @param userIdList
     * @return
     */
    boolean addTaskCandidateUser(String taskId, List<String> userIdList);

    /**
     * 得到用户任务的变量数据
     *
     * @param taskId 任务实例ID
     * @return
     */
    Map<String, Object> getVariables(String taskId);

    /**
     * 查询用户的代办任务
     *
     * @param userId 用户ID
     * @param param  参数
     * @return
     */
    Page<FlowableTaskVO> queryTodoTask(String userId, ApprovalQueryParam param);

    /**
     * 查询用户已办任务
     *
     * @param userId
     * @param param
     * @return
     */
    Page<FlowableTaskVO> queryDoneHisTask(String userId, ApprovalQueryParam param);

    /**
     * 查询此任务的用户权限
     *
     * @param taskInstanceId 任务实例ID
     * @return
     */
    List<IdentityLink> getIdentityLinksForTask(String taskInstanceId);


}
